home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / viewers / prev / prev.lha / symbol.c < prev    next >
C/C++ Source or Header  |  1991-01-29  |  898b  |  60 lines

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "art.h"
  4.  
  5. /*
  6.  * findsym
  7.  *
  8.  *    retrieve a symbol from a symbol tree
  9.  */
  10. symbol *
  11. findsym(tree, s)
  12.     symbol    *tree;
  13.     char    *s;
  14. {
  15.     int    val;
  16.  
  17.     if (tree != (symbol *)NULL) {
  18.         val = strcmp(tree->name, s);
  19.         if (val == 0)
  20.             return(tree);
  21.         if (val < 0)
  22.             return(findsym(tree->left, s));
  23.         else
  24.             return(findsym(tree->right, s));
  25.     }
  26.  
  27.     return((symbol *)NULL);
  28. }
  29.  
  30. /*
  31.  * insertsym
  32.  *
  33.  *    insert a symbol into a symbol tree.
  34.  */
  35. symbol *
  36. insertsym(tree, s)
  37.     symbol        **tree;
  38.     char        *s;
  39. {
  40.     int        val;
  41.     symbol        *sym;
  42.  
  43.     if (*tree != (symbol *)NULL) {
  44.         val = strcmp((*tree)->name, s);
  45.         if (val == 0)
  46.             return(*tree);
  47.         if (val < 0)
  48.             return(insertsym(&(*tree)->left, s));
  49.         else
  50.             return(insertsym(&(*tree)->right, s));
  51.     }
  52.  
  53.     *tree = sym = (symbol *)smalloc(sizeof(symbol));
  54.     sym->name = s;
  55.     sym->left = (symbol *)NULL;
  56.     sym->right = (symbol *)NULL;
  57.  
  58.     return(sym);
  59. }
  60.